import Define from '@/utils/define.js'
import store from '@/store/index.js'

//全局配置
function setConfig(http) {
  http.setConfig(config => {
    config.baseURL = Define.host
    config.responseType = 'json'
    return config
  })
}

// 请求拦截器
function request(http) {
  http.interceptors.request.use((config) => { // 可使用async await 做异步操作
    config.header = {
      ...config.header,
    }

    // 演示custom 用处
    if (store.state.vuex_token) {
      config.header.Authorization = 'Bearer ' + store.state.vuex_token
    }
    // console.log(store.state)
    // if (config.custom.loading) {
    //  uni.showLoading()
    // }
    // 演示
    // if (!token) { // 如果token不存在，return Promise.reject(config) 会取消本次请求
    // 	return Promise.reject(config)
    // }
    return config
  }, config => { // 可使用async await 做异步操作
    return Promise.reject(config)
  })
}

//响应拦截器
function response(http) {
  http.interceptors.response.use((response) => {
    /* 对响应成功做点什么 可使用async await 做异步操作*/
    // if (response.data.code !== 200) { // 服务端返回的状态码不等于200，则reject()
    //    	return Promise.reject(response) // return Promise.reject 可使promise状态进入catch
    // if (response.config.custom.verification) { // 演示自定义参数的作用
    //   	return response.data
    // }
    // console.log(response)
    return response
  }, (response) => {
    /*  对响应错误做点什么 （statusCode !== 200）*/
    console.log(response)
    return Promise.reject(response)
  })
}

export default {
  install(Vue, options) {
    setConfig(uni.$u.http)
    request(uni.$u.http)
    response(uni.$u.http)
  }
}